package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.*;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.CountryAreaCodeNameVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.LevelAndTagVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.MemberConfigGroupVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.RoleIdAndNameVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.*;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.*;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * 会员能力 - 会员导入相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2020-08-18
 */
public interface IMemberAbilityImportService {

    /**
     * 获取分页查询会员列表页面中各个查询条件下拉选择框的内容
     * @param headers HttpHeader信息
     * @return 操作结果
     */
    Wrapper<MemberImportSearchConditionVO> getPageCondition(HttpHeaders headers);

    /**
     * 分页、模糊查询会员
     * @param headers HttpHeader信息
     * @param queryVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberAbilityImportPageQueryVO>> pageMembers(HttpHeaders headers, MemberAbilityImportMemberQueryVO queryVO);


    /**
     * 获取新增会员页面内容
     * @param headers HttpHeader信息
     * @return 操作结果
     */
    Wrapper<MemberAbilityAddMemberPageItemsVO> getAddMemberPageItems(HttpHeaders headers);

    /**
     * 根据会员类型，查询角色列表
     * @param headers HttpHeader信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<List<RoleIdAndNameVO>> getAddMemberPageRoles(HttpHeaders headers, MemberTypeIdVO idVO);

    /**
     * 新增会员页面，根据会员类型和角色，查询等级列表
     * @param headers HttpHeader信息
     * @param typeAndRoleIdVO 接口参数
     * @return 操作结果
     */
    Wrapper<List<LevelAndTagVO>> getAddMemberPageLevels(HttpHeaders headers, MemberTypeAndRoleIdVO typeAndRoleIdVO);

    /**
     * 新增会员页面，选择会员类型为渠道会员时，返回渠道信息
     * @param headers HttpHeader信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberAbilityAddMemberPageChannelVO> getAddMemberPageChannelItems(HttpHeaders headers, MemberTypeIdVO idVO);

    /**
     * 新增渠道会员时，根据上级会员Id，查询省列表
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 返回信息
     */
    Wrapper<List<CountryAreaCodeNameVO>> getProvinceList(HttpHeaders headers, UpperRelationIdVO idVO);

    /**
     * 新增渠道会员时，根据上级会员Id和省编码，查询市列表
     * @param headers Http头部信息
     * @param codeVO 接口参数
     * @return 返回信息
     */
    Wrapper<List<CountryAreaCodeNameVO>> getCityList(HttpHeaders headers, UpperRelationIdAndAreaCodeVO codeVO);

    /**
     * 新增会员页面，根据选择的角色，返回会员注册资料信息
     * @param headers HttpHeader信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<List<MemberConfigGroupVO>> getAddMemberPageMemberConfigItems(HttpHeaders headers, RoleIdVO idVO);

    /**
     * 新增会员
     * @param headers HttpHeader信息
     * @param memberVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> addSubMember(HttpHeaders headers, MemberAbilityAddMemberVO memberVO);

    /**
     * 查询单个会员详细信息（用于修改页面）
     * @param headers HttpHeader信息
     * @param validateVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberAbilityImportMemberDetailVO> getSubMember(HttpHeaders headers, MemberValidateVO validateVO);

    /**
     * 查询单个会员详细信息（用于查询页面）
     * @param headers HttpHeader信息
     * @param validateVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberAbilityImportMemberTextDetailVO> getSubMemberDetail(HttpHeaders headers, MemberValidateVO validateVO);

    /**
     * 修改会员信息
     * @param headers HttpHeader信息
     * @param updateVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateSubMember(HttpHeaders headers, MemberAbilityUpdateMemberVO updateVO);

    /**
     * 删除会员
     * @param headers HttpHeader信息
     * @param validateVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> deleteSubMember(HttpHeaders headers, MemberValidateVO validateVO);

    /**
     * 提交平台审核
     * @param headers HttpHeader信息
     * @param validateVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> commitSubMemberToValidate(HttpHeaders headers, MemberValidateVO validateVO);

    /**
     * 引入单个/多个会员
     * @param headers HttpHeader信息
     * @param memberListVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> introduceSubMember(HttpHeaders headers, MemberAbilityAddMemberListVO memberListVO);
}
